//package com.sunday.leaf.old.leaf.autoconfiguration;
//
//import com.sunday.leaf.old.leaf.core.IdWorker;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.support.BeanDefinitionRegistry;
//import org.springframework.boot.context.properties.bind.Binder;
//import org.springframework.context.EnvironmentAware;
//import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
//import org.springframework.core.env.Environment;
//import org.springframework.core.type.AnnotationMetadata;
//
//import java.util.NoSuchElementException;
//
///**
// * @Description: 分布式ID注册绑定
// * <p>
// * Binder 负责处理对象与多个ConfigurationPropertySource（属性）之间的绑定
// * <p>
// * EnvironmentAware 凡注册到Spring容器内的bean，实现了EnvironmentAware接口重写setEnvironment方法后，
// * 在工程启动时可以获得application.properties的配置文件配置的属性值。
// * <p>
// * ImportBeanDefinitionRegistrar 类只能通过其他类@Import的方式来加载，通常是启动类或配置类。
// * 使用@Import，如果括号中的类是ImportBeanDefinitionRegistrar的实现类，则会调用接口方法，将其中要注册的类注册成bean。
// * 实现该接口的类拥有注册bean的能力。
// * @Author: zsy
// * @Create: 2022/10/24 9:58
// */
//@Slf4j
//public class LeafRegister implements EnvironmentAware, ImportBeanDefinitionRegistrar {
//
//    private Environment env;
//    private Binder binder;
//
//    @Override
//    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
//        try {
//            IdWorker.build(binder.bindOrCreate("sunday.leaf.snowflake", LeafProperties.class));
//            log.info("Registration leaf completed !");
//        } catch (NoSuchElementException e) {
//            log.warn("Failed to configure sunday leaf snowflake : 'sunday.leaf.snowflake' attribute is not specified and no embedded leaf could be configured.");
//            return;
//        }
//    }
//
//    @Override
//    public void setEnvironment(Environment environment) {
//        this.env = environment;
//        binder = Binder.get(this.env);
//    }
//}
